package utils;

import pojo.LogBean;
import pojo.RuleAutomicParam;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;


/**
 * 判断用户属性是否满足规则属性的工具
 */
public class RuleCalUtils {

    public   static  Boolean   eventProfileMatchUseProfile (LogBean eventBean, RuleAutomicParam eventParam  ){
        //U[P1=V3,P6=V8]  ===9
        //先判断事件类型是否一样
        if(eventBean.getEventId().equals(eventParam.getEventId())){
            //当前用户的属性
            Map<String, String> eventBeanProperties = eventBean.getProperties();
            //当前用户传入的参数
            HashMap<String, String> paramProperties = eventParam.getProperties();
            //判断属性是否一样
            Set<Map.Entry<String, String>> entries = paramProperties.entrySet();
            for (Map.Entry<String, String> entry : entries) {
                //根据key获取对应的eventbean的值做比较,
                //TODO  这里如果没有拿到一次，就直接false，不用往后看了，这里如果用true,就有点麻烦了。因为如果第一次满足，还要看第二次漫步满足。
                if(!entry.getValue().equals(eventBeanProperties.get(entry.getKey()))){
                    return  false;
                }
            }
            return true;
        }
        return   false;
    }



    //这里考虑前台传数据，可能会传递时间范围,可以沟通好，如果不传递开始时间就传递-1，就是0，不传递结束时间，就是最大值
    public   static  Boolean   eventProfileMatchUseProfile (LogBean eventBean, RuleAutomicParam eventParam ,Boolean  needtimecompare ){
        Long parastarttime = eventParam.getStarttime();
        Long paraendtime = eventParam.getEndtime();
        return eventProfileMatchUseProfile(eventBean, eventParam)
                &&eventBean.getTimeStamp()>(parastarttime==-1?0:parastarttime)
                &&eventBean.getTimeStamp()<(paraendtime==-1?Long.MAX_VALUE:paraendtime);
    }


}
